import os

import pandas as pd


def main():
    path = '/Users/lidaoyu/Desktop/工作/计通学院2020/1.年级分会/1.年级工作/22.毕业综测/综测结果/2024届毕业综测学业奖学金.xlsx'
    directory = os.path.dirname(path)  # 文件所在文件夹路径
    filename = os.path.basename(path)  # 文件名

    # 读取Excel文件
    df = pd.read_excel(path)

    # 生成专业排名
    df_sorted = df.sort_values(by=['专业名称', '综测总分'], ascending=[True, False])  # 按照综测总分和专业名称列进行排序
    df_sorted['专业总人数'] = df_sorted.groupby('专业名称')['综测总分'].transform('count')  # 计算每个专业的总人数
    # 计算排名并格式化为"排名/专业总人数"格式
    df_sorted['专业排名'] = df_sorted.groupby('专业名称')['综测总分'].rank(method='min', ascending=False).astype(int)
    df_sorted['综测总分专业排名'] = df_sorted['专业排名'].astype(str) + '/' + df_sorted['专业总人数'].astype(str)

    # 生成班级排名
    df_sorted.sort_values(by=['班级', '综测总分'], ascending=[True, False])  # 按照综测总分和班级名称列进行排序
    df_sorted['班级总人数'] = df_sorted.groupby('班级')['综测总分'].transform('count')  # 计算每个专业的总人数
    # 计算排名并格式化为"排名/专业总人数"格式
    df_sorted['班级排名'] = df_sorted.groupby('班级')['综测总分'].rank(method='min', ascending=False).astype(int)
    df_sorted['综测总分班级排名'] = df_sorted['班级排名'].astype(str) + '/' + df_sorted['班级总人数'].astype(str)

    # 删除"专业排名"列和"专业总人数"列
    df_sorted = df_sorted.drop(['专业总人数', '专业排名', '班级总人数', '班级排名'], axis=1)

    # 将学号列转换为字符串类型
    df_sorted['学号'] = df_sorted['学号'].astype(str)

    # 保存结果到新的Excel文件
    df_sorted.to_excel(f'{directory}/{filename}综测总分专业&班级排名.xlsx', index=False)


if __name__ == '__main__':
    main()
